package com.zst.amqp;

import com.zst.amqp.utils.StringUtils;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 回调函数的context
 * @author zst
 * @param <T> 回调函数类型
 */
public abstract class AbstractCallbackContext<T> {
    /** 生产者确认回调函数实例Map*/
    private ConcurrentHashMap<String, T> context;

    public AbstractCallbackContext() {
        this.context = new ConcurrentHashMap<>();
    }

    /**
     * 判断key对应的回调函数实例是否已注册
     * @param key
     * @return
     */
    public boolean isExist(String key) {
        return StringUtils.isNotEmpty(key) && this.context.containsKey(key);
    }

    /**
     * 注册回调函数
     * @param key
     * @param callback
     */
    public void register(String key, T callback) {
        if (StringUtils.isNotEmpty(key) && callback != null) {
            context.put(key, callback);
        }
    }

    /**
     * 取消注册
     * @param key
     */
    public void unregister(String key) {
        if (StringUtils.isNotEmpty(key)) {
            context.remove(key);
        }
    }

    /**
     * 获取回调函数
     * @param key
     * @return
     */
    public T getCallbackFunction(String key) {
        return StringUtils.isNotEmpty(key) ? this.context.get(key) : null;
    }

}
